#include "../include/cHuffmanTree.h"

cHuffmanCode::cHuffmanCode():Bits(NULL),Length(0),Size(0),bits(0){}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
cHuffmanCode::~cHuffmanCode()
{
	if(Bits != NULL)
		delete Bits;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cHuffmanCode::Put(bool bit)
{
	if(Length%32 == 0)
	{
		uint32_t * temp = new uint32_t[Size+1];
		for(int8_t i = 0 ; i < Size;i++)
			temp[i] = Bits[i];
		temp[Size++] = 0;
		delete Bits;
		Bits = temp;
	}
	if(bit)
		Bits[Size-1] |= 1<<(Length%32);
	Length++;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void cHuffmanCode::Write(cBitstream * bitstream)
{
	for(int8_t i=0;i<Size-1;i++)
		bitstream->putBits(32,Bits[i]);
	bitstream->putBits(Length%32,Bits[Size-1]);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////